/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO.MySQL;

import ClassesUnicas.Jogo;
import DAO.DAOJogo;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author Igor
 */
public class DAOJogoMySQL extends DAOConexaoMySQL implements DAOJogo {

    @Override
    public ArrayList<Jogo> buscaJogos(String idPessoa, String idFase, String idSubFase) throws Exception {
        ResultSet result = null;
        ArrayList<Jogo> jogos = new ArrayList<Jogo>();
        String clausulaWhere = "";
        String sql = "";

        if (idPessoa != null) {
            clausulaWhere = clausulaWhere + " and a.id_pessoa = " + idPessoa;
        }

        if (idFase != null) {
            clausulaWhere = clausulaWhere + " and b.id_fase = " + idFase;
        }

        if (idSubFase != null) {
            clausulaWhere = clausulaWhere + " and c.id_sub_fase = " + idSubFase;
        }

        sql = "select distinct \n"
                + "a.ID_INSTANCIA_JOGO,\n"
                + "if(a.ID_INSTANCIA_JOGO = (select aaa.ID_INSTANCIA_JOGO from\n"
                + "instancia_jogo aaa\n"
                + "left outer join jogo bbb\n"
                + "on aaa.ID_INSTANCIA_JOGO = bbb.ID_INSTANCIA_JOGO\n"
                + "where bbb.ID_PESSOA = a.ID_PESSOA\n"
                + "and aaa.ID_FASE = b.ID_FASE\n"
                + "and aaa.TEMPO_JOGO > 0\n"
                + "order by aaa.DATA_INICIO\n"
                + " limit 1), \"BL\", null\n"
                + ") as BASELINE,\n"
                + "b.ID_FASE,\n"
                + "c.ID_SUB_FASE,\n"
                + "DATE_FORMAT(b.DATA_INICIO,'%d/%m/%Y %h:%m:%s') as DATA_INICIO,\n"
                + "b.TEMPO_EXP_ROSTO,\n"
                + "b.TEMPO_TRANSICAO_IMAGENS,\n"
                + "b.REPETIR_APRESENTACAO_IMAGENS,\n"
                + "b.MSG_ACERTO_ERRO,\n"
                + "f.PERC_AVANCAR_SUB_FASE,\n"
                + "e.NOME as JOGADOR,\n"
                + "d.DESCRICAO as MODO_JOGO,\n"
                + "replace(replace(replace(b.DATA_INICIO, '-',''),':',''),' ','') as CODIGO_JOGO\n"
                + "from jogo a\n"
                + "left outer join instancia_jogo b\n"
                + "on a.ID_INSTANCIA_JOGO = b.ID_INSTANCIA_JOGO\n"
                + "left outer join instancia_sub_fase c\n"
                + "on b.ID_INSTANCIA_JOGO = c.ID_INSTANCIA_JOGO\n"
                + "left outer join modo_jogo d\n"
                + "on b.ID_MODO_JOGO = d.ID_MODO_JOGO\n"
                + "left outer join pessoa e\n"
                + "on a.ID_PESSOA = e.ID_PESSOA\n"
                + "left outer join perc_avancar_sub_fase f\n"
                + "on b.ID_INSTANCIA_JOGO = f.ID_INSTANCIA_JOGO and b.ID_FASE = f.ID_FASE and c.ID_SUB_FASE = f.ID_SUB_FASE\n"
                + "where b.ID_FASE <> '' and c.ID_SUB_FASE <> ''"
                + clausulaWhere;
        result = this.select.executeQuery(sql);

        while (result.next()) {
            Jogo jogo = new Jogo();

            jogo.setIdJogo(result.getLong("id_instancia_jogo"));
            jogo.setIdFase(result.getLong("id_fase"));
            jogo.setIdSubFase(result.getLong("id_sub_fase"));
            jogo.setDataInicio(result.getString("data_inicio"));
            jogo.setCodigoBarras(result.getString("codigo_jogo"));
            jogo.setBaseline(result.getString("BASELINE") != null);
            jogo.setTempoApresentacaoImagens(result.getInt("TEMPO_EXP_ROSTO"));
            jogo.setTempoTransicaoImagens(result.getInt("TEMPO_TRANSICAO_IMAGENS"));
            jogo.setRepetirApresentacaoImagens(result.getInt("REPETIR_APRESENTACAO_IMAGENS"));
            jogo.setMsgAcertoErro(result.getString("MSG_ACERTO_ERRO") == "1");
            jogo.setPercsAvancarSubFases(result.getInt("PERC_AVANCAR_SUB_FASE"));
            jogo.setNomeJogador(result.getString("JOGADOR"));
            jogo.setModoJogo(result.getString("MODO_JOGO"));
            jogos.add(jogo);
        }

        return jogos;
    }

}
